home *** CD-ROM | disk | FTP | other *** search
- // ------------------------------- //
- // -------- Start of File -------- //
- // ------------------------------- //
- // ----------------------------------------------------------- //
- // C++ Source Code File Name: ccidx_sh.cpp
- // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
- // Produced By: Doug Gaer
- // File Creation Date: 12/16/1997
- // Date Last Modified: 03/17/1999
- // Copyright (c) 1997 Douglas M. Gaer
- // ----------------------------------------------------------- //
- // ------------- Program Description and Details ------------- //
- // ----------------------------------------------------------- //
- /*
- The VBD C++ classes are copyright (c) 1997, by Douglas M. Gaer.
- All those who put this code or its derivatives in a commercial
- product MUST mention this copyright in their documentation for
- users of the products in which this code or its derivative
- classes are used. Otherwise, you have the freedom to redistribute
- verbatim copies of this source code, adapt it to your specific
- needs, or improve the code and release your improvements to the
- public provided that the modified files carry prominent notices
- stating that you changed the files and the date of any change.
-
- THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
- THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
- IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
- YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
- CORRECTION.
-
- General purpose search functions used with the CCIndex class.
- */
- // ----------------------------------------------------------- //
- #include "ccidx_sh.h"
- #include "btwalker.h"
-
- // Global data structures used to organize and store btree nodes
- DLList<InMemCopy> CCIndex_SH_DLList; // Doubly Linked
- DLList<InMemCopy> *dllist = &CCIndex_SH_DLList; // Doubly Linked
- DNode<InMemCopy> *dllistptr = 0; // DLList node pointer
-
- // Variable used to count the number of object found during a search
- int ObjectsFound = 0;
-
- void BtreeSearch(Btree *btx, int item, CCIndex &ccindex,
- UString &str, int find_all)
- {
- CachePointer nxt(*btx->GetCache());
- BtreeWalkerb tw(btx, btINORDER);
- int i, j;
- nxt = btx->GetRoot();
- DLList<EntryKey> list; // Short temporary list used to sort keys
- DNode<EntryKey> *ptr;
-
- while((__LWORD__)nxt != 0) {
- nxt = tw.Next();
- if((__LWORD__)nxt) {
- if(nxt->left != 0) {
- for(i = 0; i < nxt->cnt; i++) {
- list.StoreNode(nxt->entry[i]);
- }
- continue;
- }
-
- if(!list.IsEmpty()) {
- ptr = list.GetFront();
- for(i = 0, j = 0; i < nxt->cnt; i++) {
- while(!list.IsHeader(ptr)) {
- if(FullCompare(ptr->Data, nxt->entry[i].key) < 0) {
- BtreeKeySearch(ptr->Data, item, ccindex, str, find_all);
- list.Delete(ptr);
- }
- ptr = ptr->GetNext();
- }
- }
- for(; j < nxt->cnt; j++) {
- BtreeKeySearch(nxt->entry[j], item, ccindex, str, find_all);
- }
- }
- else {
- for(i = 0; i < nxt->cnt; i++) {
- BtreeKeySearch(nxt->entry[i], item, ccindex, str, find_all);
- }
- }
- }
- }
- }
-
- void BtreeKeySearch(EntryKey &e, int item, CCIndex &ccindex, UString &str,
- int find_all)
- // Visit function used to search each node for a specified item
- {
- int offset;
- UString buf;
-
- if(item == CARD_NAME) {
- buf = e.key;
- if(find_all == 0) { // Search for single match
- int result = CaseICmp(buf, str);
- if(result == 0) {
- InMemCopy inmemcopy(e.key, e.object_address, e.class_id);
- dllist->StoreNode(inmemcopy);
- ObjectsFound++;
- }
- }
- else { // Search for all matches
- offset = buf.Find(str.c_str(), 0);
- if(offset != UString::NoMatch) {
- InMemCopy inmemcopy(e.key, e.object_address, e.class_id);
- dllist->StoreNode(inmemcopy);
- ObjectsFound++;
- }
- }
- }
- else {
- ccindex.ReadObject(e.object_address);
- switch(item) {
- case COMPANY_NAME:
- buf = ccindex.GetCompanyName();
- break;
- case DEPARTMENT_NAME:
- buf = ccindex.GetDepartmentName();
- break;
- case PHONE_NUMBER:
- buf = ccindex.GetPhoneNumber();
- break;
- case FAX_NUMBER:
- buf = ccindex.GetFaxNumber();
- break;
- case CELL_NUMBER:
- buf = ccindex.GetCellNumber();
- break;
- case BEEPER_NUMBER:
- buf = ccindex.GetBeeperNumber();
- break;
- case EMAIL_ADDRESS:
- buf = ccindex.GetEmailAddress();
- break;
- case STREET_ADDRESS:
- buf = ccindex.GetStreetAddress();
- break;
- case INTERNET_URLS:
- buf = ccindex.GetInternetURLS();
- break;
- case COMMENTS_BLOCK:
- buf = ccindex.GetCommentsBlock();
- break;
- default:
- return;
- }
- if(find_all == 0) { // Search for single match
- int result = CaseICmp(buf, str);
- if(result == 0) {
- InMemCopy inmemcopy(e.key, e.object_address, e.class_id);
- dllist->StoreNode(inmemcopy);
- ObjectsFound++;
- }
- }
- else { // Search for all matches
- offset = buf.Find(str.c_str(), 0);
- if(offset != UString::NoMatch) {
- InMemCopy inmemcopy(e.key, e.object_address, e.class_id);
- dllist->StoreNode(inmemcopy);
- ObjectsFound++;
- }
- }
- }
- }
-
- void LoadKeys(EntryKey &e)
- // Visit function used to load the btree keys into memory
- {
- InMemCopy inmemcopy(e.key, e.object_address, e.class_id);
- dllist->StoreNode(inmemcopy);
- }
- // ----------------------------------------------------------- //
- // ------------------------------- //
- // --------- End of File --------- //
- // ------------------------------- //
-
-